/*
    TypeScript String（字符串）
 */

/**
 * String 对象用于处理文本（字符串）。
 * String 对象属性
 *      constructor：对创建该对象的函数的引用。
 *      length：返回字符串的长度。
 *      prototype：允许您向对象添加属性和方法。
 * String 方法
 *      charAt()：返回在指定位置的字符。
 *      charCodeAt()：返回在指定的位置的字符的 Unicode 编码。
 *      concat()：连接两个或更多字符串，并返回新的字符串。
 *      indexOf()：返回某个指定的字符串值在字符串中首次出现的位置。
 *      lastIndexOf()：从后向前搜索字符串，并从起始位置（0）开始计算返回字符串最后出现的位置。
 *      localeCompare()：用本地特定的顺序来比较两个字符串。
 *      match()：查找找到一个或多个正则表达式的匹配。
 *      replace()：替换与正则表达式匹配的子串。
 *      search()：检索与正则表达式相匹配的值。
 *      slice()：提取字符串的片断，并在新的字符串中返回被提取的部分。
 *      split()：把字符串分割为子字符串数组。
 *      substr()：从起始索引号提取字符串中指定数目的字符。
 *      substring()：提取字符串中两个指定的索引号之间的字符。
 *      toLocaleLowerCase()：根据主机的语言环境把字符串转换为小写，只有几种语言（如土耳其语）具有地方特有的大小写映射。
 *      toLocaleUpperCase()：据主机的语言环境把字符串转换为大写，只有几种语言（如土耳其语）具有地方特有的大小写映射。
 *      toLowerCase()：把字符串转换为小写。
 *      toString()：返回字符串。
 *      toUpperCase()：把字符串转换为大写。
 *      valueOf()：返回指定字符串对象的原始值。
 */

//constructor
var str = new String( "This is string" );
console.log("str.constructor is:" + str.constructor);

//length
var uname = new String("Hello World");
console.log("Length "+uname.length);  // 输出 11

//prototype
function employee2(id:number,name:string) {
    this.id = id;
    this.name = name;
}
var emp = new employee2(123,"admin");
employee2.prototype.email="admin@bestvike.com"; // 添加属性 email
console.log("员工号: "+emp.id);
console.log("员工姓名: "+emp.name);
console.log("员工邮箱: "+emp.email);

//charAt()
var str = new String("RUNOOB");
console.log("str.charAt(0) 为:" + str.charAt(0)); // R
console.log("str.charAt(1) 为:" + str.charAt(1)); // U
console.log("str.charAt(2) 为:" + str.charAt(2)); // N
console.log("str.charAt(3) 为:" + str.charAt(3)); // O
console.log("str.charAt(4) 为:" + str.charAt(4)); // O
console.log("str.charAt(5) 为:" + str.charAt(5)); // B

//charCodeAt()
var str = new String("ryanliu");
console.log("str.charCodeAt(0) 为:" + str.charCodeAt(0)); // 82
console.log("str.charCodeAt(1) 为:" + str.charCodeAt(1)); // 85
console.log("str.charCodeAt(2) 为:" + str.charCodeAt(2)); // 78
console.log("str.charCodeAt(3) 为:" + str.charCodeAt(3)); // 79
console.log("str.charCodeAt(4) 为:" + str.charCodeAt(4)); // 79
console.log("str.charCodeAt(5) 为:" + str.charCodeAt(5)); // 66

//concat()
var str1 = new String( "hello" );
var str2 = new String( "world" );
var str3 = str1.concat( str2 );
console.log("str1 + str2 : "+str3);

//indexOf()
var str1 = new String( "ryan" );

var index = str1.indexOf( "a" );
console.log("查找的字符串位置 :" + index );

//lastIndexOf()
var str1 = new String( "This is string one and again string" );
var index = str1.lastIndexOf( "string" );
console.log("lastIndexOf 查找到的最后字符串位置 :" + index ); // 29

index = str1.lastIndexOf( "one" );
console.log("lastIndexOf 查找到的最后字符串位置 :" + index ); // 15

//localeCompare()
var str1 = new String( "This is beautiful string" );

var index = str1.localeCompare( "This is beautiful string");

console.log("localeCompare first :" + index );  // 0

//match()
var str4="The rain in SPAIN stays mainly in the plain";
var n=str4.match(/ain/g);  // ain,ain,ain

//replace()
var re = /(\w+)\s(\w+)/;
var str5 = "zara ali";
var newstr = str5.replace(re, "$2, $1");
console.log(newstr); // ali, zara

//search()
var re = /apples/gi;
var str6 = "Apples are round, and apples are juicy.";
if (str6.search(re) == -1 ) {
    console.log("Does not contain Apples" );
} else {
    console.log("Contains Apples" );
}

//split()
var arr = "Apples are round, and apples are juicy.";
var splitted = arr.split(" ", 3);
console.log(splitted)  // [ 'Apples', 'are', 'round,' ]

//substring()
var str7 = "落霞与孤鹜齐飞，秋水共长天一色";
console.log("(1,2): "    + str7.substring(1,2));
console.log("(0,10): "   + str7.substring(0, 10));
console.log("(5): "      + str7.substring(5));

//toLowerCase()
var str8 = "Hello World";
console.log(str8.toLowerCase( ));

//toUpperCase()
var str9 = "Hello World";
console.log(str.toUpperCase( ));

//valueOf()
var str10 = new String("Ryan");
console.log(str10.valueOf( ));